﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Pacocofose
{
    public class Terreno
    {
        #region Variaveis
        Texture2D Fundo, Terreno01, TerrenoDireito, Terreno2, Terreno2Direito, Terreno3, Terreno3Direito, Terreno4, Terreno4Direito, Terreno5, Terreno5Direito;
        public static Vector2 VetorTerreno, VetorTerrenoDireito, VetorTerreno2, VetorTerreno2Direito, VetorTerreno3, VetorTerreno3Direito, VetorTerreno4, VetorTerreno4Direito, VetorTerreno5, VetorTerreno5Direito;
        Random rndTerreno = new Random();
        public static BoundingBox BdTerreno, BdTerrenoDireito, BdTerreno2, BdTerreno2Direito, BdTerreno3, BdTerreno3Direito, BdTerreno4, BdTerreno4Direito, BdTerreno5, BdTerreno5Direito;
        public static Vector2 VetorFundo = Vector2.Zero;
        public static Vector2 VetorFundo2;
        public static float Velocidade = 1;
        #endregion


        public Terreno(Game game)
        {
            #region Vetores
            VetorFundo2.X = 0;
            VetorFundo2.Y = 600;
            VetorTerreno.X = rndTerreno.Next(-650, -151);
            VetorTerreno.Y = 250;
            VetorTerrenoDireito.X = VetorTerreno.X + 870;
            VetorTerrenoDireito.Y = 250;
            VetorTerreno2.X = rndTerreno.Next(-650, -151);
            VetorTerreno2.Y = 400;
            VetorTerreno2Direito.X = VetorTerreno2.X + 870;
            VetorTerreno2Direito.Y = 400;
            VetorTerreno3.X = rndTerreno.Next(-650, -151);
            VetorTerreno3.Y = 550;
            VetorTerreno3Direito.X = VetorTerreno3.X + 870;
            VetorTerreno3Direito.Y = 550;
            VetorTerreno4.X = rndTerreno.Next(-650, -151);
            VetorTerreno4.Y = 700;
            VetorTerreno4Direito.X = VetorTerreno4.X + 870;
            VetorTerreno4Direito.Y = 700;
            VetorTerreno5.X = rndTerreno.Next(-650, -151);
            VetorTerreno5.Y = 850;
            VetorTerreno5Direito.X = VetorTerreno5.X + 870;
            VetorTerreno5Direito.Y = 850;
            #endregion

            #region Texture2D
            Fundo = game.Content.Load<Texture2D>("Fundo_pacoca");
            Terreno01 = game.Content.Load<Texture2D>("TerrenoEsquerdo");
            TerrenoDireito = game.Content.Load<Texture2D>("TerrenoDireito");
            Terreno2 = game.Content.Load<Texture2D>("TerrenoEsquerdo");
            Terreno2Direito = game.Content.Load<Texture2D>("TerrenoDireito");
            Terreno3 = game.Content.Load<Texture2D>("TerrenoEsquerdo");
            Terreno3Direito = game.Content.Load<Texture2D>("TerrenoDireito");
            Terreno4 = game.Content.Load<Texture2D>("TerrenoEsquerdo");
            Terreno4Direito = game.Content.Load<Texture2D>("TerrenoDireito");
            Terreno5 = game.Content.Load<Texture2D>("TerrenoEsquerdo");
            Terreno5Direito = game.Content.Load<Texture2D>("TerrenoDireito");
            #endregion
        }



        public void Update()
        {

            #region Restart
            if (Instrucoes.ResetarTerreno)
            {
                Velocidade = 1;
                VetorFundo.X = 0;
                VetorFundo.Y = 0;
                VetorFundo2.X = 0;
                VetorFundo2.Y = 600;
                VetorTerreno.X = rndTerreno.Next(-650, -151);
                VetorTerreno.Y = 250;
                VetorTerrenoDireito.X = VetorTerreno.X + 870;
                VetorTerrenoDireito.Y = 250;
                VetorTerreno2.X = rndTerreno.Next(-650, -151);
                VetorTerreno2.Y = 400;
                VetorTerreno2Direito.X = VetorTerreno2.X + 870;
                VetorTerreno2Direito.Y = 400;
                VetorTerreno3.X = rndTerreno.Next(-650, -151);
                VetorTerreno3.Y = 550;
                VetorTerreno3Direito.X = VetorTerreno3.X + 870;
                VetorTerreno3Direito.Y = 550;
                VetorTerreno4.X = rndTerreno.Next(-650, -151);
                VetorTerreno4.Y = 700;
                VetorTerreno4Direito.X = VetorTerreno4.X + 870;
                VetorTerreno4Direito.Y = 700;
                VetorTerreno5.X = rndTerreno.Next(-650, -151);
                VetorTerreno5.Y = 850;
                VetorTerreno5Direito.X = VetorTerreno5.X + 870;
                VetorTerreno5Direito.Y = 850;                
                Instrucoes.ResetarTerreno = false;
            }
            #endregion
           
            #region Movimentação do Terreno / Fundo
            if (Instrucoes.SinglePlayer2 || Instrucoes.MultiPlayer2)
            {
                if (Personagem.VetorPersonagem.Y > -70 && Personagem.VetorPersonagem2.Y > -70 || Personagem.VetorPersonagem2.Y > -70 && Personagem.ParaTerreno2 == false || Personagem.ParaTerreno == false && Personagem.VetorPersonagem.Y > -70)
                {
                    Personagem.PararC = false;
                    if (Personagem.timeRemaining == 0.0f)
                    {
                        VetorFundo.Y -= (Velocidade / 2);
                        VetorFundo2.Y -= (Velocidade / 2);
                        VetorTerreno.Y -= Velocidade;
                        VetorTerrenoDireito.Y -= Velocidade;
                        VetorTerreno2.Y -= Velocidade;
                        VetorTerreno2Direito.Y -= Velocidade;
                        VetorTerreno3.Y -= Velocidade;
                        VetorTerreno3Direito.Y -= Velocidade;
                        VetorTerreno4.Y -= Velocidade;
                        VetorTerreno4Direito.Y -= Velocidade;
                        VetorTerreno5.Y -= Velocidade;
                        VetorTerreno5Direito.Y -= Velocidade;


                    }

                    if (VetorTerreno.Y <= -98)
                    {
                        VetorTerreno.X = rndTerreno.Next(-650, -151);
                        VetorTerreno.Y = 648;

                        VetorTerrenoDireito.X = VetorTerreno.X + 870;
                        VetorTerrenoDireito.Y = 648;

                        if (VetorTerreno.Y != VetorTerreno5.Y + 150)
                        {
                            VetorTerreno.Y = VetorTerreno5.Y + 150;
                            VetorTerrenoDireito.Y = VetorTerreno.Y;
                        }
                    }
                    if (VetorTerreno2.Y <= -98)
                    {
                        VetorTerreno2.X = rndTerreno.Next(-650, -151);
                        VetorTerreno2.Y = 648;

                        VetorTerreno2Direito.X = VetorTerreno2.X + 870;
                        VetorTerreno2Direito.Y = 648;

                        if (VetorTerreno2.Y != VetorTerreno.Y + 150)
                        {
                            VetorTerreno2.Y = VetorTerreno.Y + 150;
                            VetorTerreno2Direito.Y = VetorTerreno2.Y;
                        }
                    }
                    if (VetorTerreno3.Y <= -98)
                    {
                        VetorTerreno3.X = rndTerreno.Next(-650, -151);
                        VetorTerreno3.Y = 648;

                        VetorTerreno3Direito.X = VetorTerreno3.X + 870;
                        VetorTerreno3Direito.Y = 648;

                        if (VetorTerreno3.Y != VetorTerreno2.Y + 150)
                        {
                            VetorTerreno3.Y = VetorTerreno2.Y + 150;
                            VetorTerreno3Direito.Y = VetorTerreno3.Y;
                        }
                    }
                    if (VetorTerreno4.Y <= -98)
                    {
                        VetorTerreno4.X = rndTerreno.Next(-650, -151);
                        VetorTerreno4.Y = 648;

                        VetorTerreno4Direito.X = VetorTerreno4.X + 870;
                        VetorTerreno4Direito.Y = 648;

                        if (VetorTerreno4.Y != VetorTerreno3.Y + 150)
                        {
                            VetorTerreno4.Y = VetorTerreno3.Y + 150;
                            VetorTerreno4Direito.Y = VetorTerreno4.Y;
                        }
                    }
                    if (VetorTerreno5.Y <= -98)
                    {
                        VetorTerreno5.X = rndTerreno.Next(-650, -151);
                        VetorTerreno5.Y = 648;

                        VetorTerreno5Direito.X = VetorTerreno5.X + 870;
                        VetorTerreno5Direito.Y = 648;

                        if (VetorTerreno5.Y != VetorTerreno4.Y + 150)
                        {
                            VetorTerreno5.Y = VetorTerreno4.Y + 150;
                            VetorTerreno5Direito.Y = VetorTerreno5.Y;
                        }

                        Velocidade += 0.1f;

                    }
                }
            }
            #endregion

            #region Colisão

            BdTerreno = new BoundingBox(new Vector3(VetorTerreno.X, VetorTerreno.Y, 0), new Vector3(VetorTerreno.X + Terreno01.Width - 10, VetorTerreno.Y + Terreno01.Height - 45, 0));

            BdTerrenoDireito = new BoundingBox(new Vector3(VetorTerrenoDireito.X, VetorTerrenoDireito.Y, 0), new Vector3(VetorTerrenoDireito.X + TerrenoDireito.Width - 10, VetorTerrenoDireito.Y + TerrenoDireito.Height - 45, 0));

            BdTerreno2 = new BoundingBox(new Vector3(VetorTerreno2.X, VetorTerreno2.Y, 0), new Vector3(VetorTerreno2.X + Terreno2.Width - 10, VetorTerreno2.Y + Terreno2.Height - 45, 0));

            BdTerreno2Direito = new BoundingBox(new Vector3(VetorTerreno2Direito.X, VetorTerreno2Direito.Y, 0), new Vector3(VetorTerreno2Direito.X + Terreno2Direito.Width - 10, VetorTerreno2Direito.Y + Terreno2Direito.Height - 45, 0));

            BdTerreno3 = new BoundingBox(new Vector3(VetorTerreno3.X, VetorTerreno3.Y, 0), new Vector3(VetorTerreno3.X + Terreno3.Width - 10, VetorTerreno3.Y + Terreno3.Height - 45, 0));

            BdTerreno3Direito = new BoundingBox(new Vector3(VetorTerreno3Direito.X, VetorTerreno3Direito.Y, 0), new Vector3(VetorTerreno3Direito.X + Terreno3Direito.Width - 10, VetorTerreno3Direito.Y + Terreno3Direito.Height - 45, 0));

            BdTerreno4 = new BoundingBox(new Vector3(VetorTerreno4.X, VetorTerreno4.Y, 0), new Vector3(VetorTerreno4.X + Terreno4.Width - 10, VetorTerreno4.Y + Terreno4.Height - 45, 0));

            BdTerreno4Direito = new BoundingBox(new Vector3(VetorTerreno4Direito.X, VetorTerreno4Direito.Y, 0), new Vector3(VetorTerreno4Direito.X + Terreno4Direito.Width - 10, VetorTerreno4Direito.Y + Terreno4Direito.Height - 45, 0));

            BdTerreno5 = new BoundingBox(new Vector3(VetorTerreno5.X, VetorTerreno5.Y, 0), new Vector3(VetorTerreno5.X + Terreno5.Width - 10, VetorTerreno5.Y + Terreno5.Height - 45, 0));

            BdTerreno5Direito = new BoundingBox(new Vector3(VetorTerreno5Direito.X, VetorTerreno5Direito.Y, 0), new Vector3(VetorTerreno5Direito.X + Terreno5Direito.Width - 10, VetorTerreno5Direito.Y + Terreno5Direito.Height - 45, 0));
            #endregion

        }
        public void Draw(SpriteBatch spriteBatch)
        {
            #region Renderizando imagens
            spriteBatch.Draw(Fundo, new Vector2(VetorFundo.X, VetorFundo.Y), Color.White);
            spriteBatch.Draw(Fundo, new Vector2(VetorFundo2.X, VetorFundo2.Y), Color.White);
            spriteBatch.Draw(Terreno01, VetorTerreno, Color.White);
            spriteBatch.Draw(TerrenoDireito, VetorTerrenoDireito, Color.White);
            spriteBatch.Draw(Terreno2, VetorTerreno2, Color.White);
            spriteBatch.Draw(Terreno2Direito, VetorTerreno2Direito, Color.White);
            spriteBatch.Draw(Terreno3, VetorTerreno3, Color.White);
            spriteBatch.Draw(Terreno3Direito, VetorTerreno3Direito, Color.White);
            spriteBatch.Draw(Terreno4, VetorTerreno4, Color.White);
            spriteBatch.Draw(Terreno4Direito, VetorTerreno4Direito, Color.White);
            spriteBatch.Draw(Terreno5, VetorTerreno5, Color.White);
            spriteBatch.Draw(Terreno5Direito, VetorTerreno5Direito, Color.White);
            #endregion
        }

    }
}
